python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 |
您所在的位置:网站首页 › python 彩色输出 › python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 |
python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 python opencv 1,读取图像 2,图像变矩阵 3,图像转灰度图像 4,彩色图像是3D数组 5,灰度图像是2D数组 6,彩色图像是3个2D数组 7,彩色图像有3个通道,提取3个通道 #Copyright ''' 熟悉opencv库 ''' import cv2 import numpy as np img=cv2.imread('D:/python_examples/mei_hua1.jpeg') '''显示彩色图像 ''' #cv2.imshow("img",img) #cv2.waitKey(0) gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ''' 显示灰度图像''' #cv2.imshow("gray",gray) #cv2.waitKey(0) '''得到了图像的大小 ''' rows,cols,_=img.shape print(rows,cols) '''初始化一个大小一样的图像,元素初始化为0 ''' created=np.zeros((rows,cols)) ''' for in 语句,遍历数组,但不能修改数组''' for i in img: for j in i: #print(j) pass '''给数组赋值 ''' for i in range(0,rows): for j in range(0,cols): created[i,j]=img[i,j,2]#第三个参数,可以是0,1,2分别表示3个通道 print(created.shape)#创建的图像大小 '''必须加这一条语句,否则无法正确显示图像 ''' created=created.astype(np.uint8)#转换类型,才能正确的显示图像 cv2.imshow('created',created) cv2.imwrite('D:/python_examples/created.jpg',created) cv2.waitKey(0)通道0 通道1 通道2 总结: 1个彩色图像,可以分解为3个灰度图像 3个灰度图像合起来是一个彩色图像 通道2图像,观察到花很白。如果 图像很白,说明对应的像素值大。 所以,做一个二值处理。 当像素值大于180,显示255 当像素值小于等于180,显示为0 created[created>180]=255 created[created这个图像就是2值图像。 什么是2值图像,就是里面只有黑和白。 通道3变成了2值图像以后,有什么变化。 在通道3, 看到有花,有枝条,有朦胧的一个背景。 在二值图像, 就看到了花。 花尾巴部分,变成了白色,原来是灰色。 枝条没有了。 朦胧的背景也没有了 所以,二值图像,消除了枝条。 消除了朦胧的背景。 只显示了我们关心的花。 仔细观察图像变化,很重要! 对于二值图像,显示边缘。 什么是边缘。 举例: 000011100 左边连续的0,都是黑 所以0-0=0 右边-左边 01 左边是0,右边是1 这里就是边缘了 右边-左边=1 111连续的1,都是白色 10 这里是边缘,因为从1变0 00 都是黑 按照这个道理。 修改二值图像,提取边缘 for i in range(0,rows): for j in range(0,cols-1): #created[i,j]=created[i,j+1]-created[i,j]# 0-0 255-255 255-0 0-255 if(created[i,j+1]现在图像里面,只有一些白色的线条。 白色的面积小了很多了。 而且这些白色线条,组成了花的轮廓。 for i in range(0,rows): for j in range(0,cols-1): #created[i,j]=created[i,j+1]-created[i,j]# 0-0 255-255 255-0 0-255 if(created[i,j+1]>=created[i,j]): created[i,j]=0 else: created[i,j]=255读者可以更换其他图像试试,看看效果 总结: 对图像处理的步骤 1,彩色图像 2,提取3个通道 3,把第三通道的图像做二值化,阈值自己可以调整的 4,把二值化图像,提取了边缘 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |